/*******************************************************************************
 * Classe Arme : classe abstraite contenant les caractéristiques des armes du
 *               jeu
 ******************************************************************************/
package Armes;

import javax.swing.*;
import prjintwg.Jeu;
import ElementsDeJeu.Personnage;
import prjintwg.PnlJeu;

/**
 * @author W&G
 */
public abstract class Arme extends JComponent {

    protected PnlJeu pnlJeu;//panneau du jeu
    protected Jeu jeu;//renvoie a la classe de gestion du jeu
    protected double puissance;//puissance de l'arme
    protected int positionX;//Position en x de l'arme
    protected double posXDouble = 0.0;//Position en x de l'arme en réel
    protected int positionY;//Position en y de l'arme
    protected double posYDouble = 0.0;//Position en y de l'arme en réel
    protected double vitesseX = 0.0;//Vitesse de l'arme en x
    protected double vitesseY = 0.0;//Vitesse de l'arme en y
    protected double angleRad = 0.0;//Angle de tir en radian
    protected final int TAILLEFENETRE = 603;//Taille de la fenetre

    /**
     * Endommage un personnage
     * @param personnage Personnage touché
     * @return 0 par défaut
     */
    public int endommager(Personnage personnage) {
        return 0;
    }
/**
 * Retourne la position en x de l'arme
 * @return position en x de l'arme
 */
    public int getPositionX() {
        return this.positionX;
    }
/**
 * Calcule la position en x selon la vitesse en x
 */
    protected void calculPositionX() {
        this.posXDouble = this.posXDouble + vitesseX;
        this.positionX = (int) this.posXDouble;
    }
/**
 * Retourne la position en y
 * @return Retourne la position en y
 */
    public int getPositionY() {
        return this.positionY;
    }
/**
 * Calcule la position en y selon la vitesse en y
 */
    protected void calculPositionY() {
        this.posYDouble = this.posYDouble + vitesseY;
        this.positionY = (int) this.posYDouble;
    }
/**
 * Calcule la vitesse en x selon le vent
 */
    protected void calculVitesseX() {
        this.vitesseX = this.vitesseX + Jeu.getTabVent(this.positionX) / 60;
    }
/**
 *  Calcule la vitesse en y selon la gravite
 */
    protected void calculVitesseY() {
        this.vitesseY = this.vitesseY - Jeu.getTabGravite(this.positionX) / 60;
    }
/**
 * Définit la vitesse en x
 * @param vitesse vitesse de l'arme
 * @param angle angle de l'arme
 */
    public void setVitesseX(double vitesse, double angle) {
        angleRad = angle / 180 * Math.PI;
        this.vitesseX = vitesse * Math.cos(angleRad);
    }
/**
 * Définit la vitesse en y
 * @param vitesse vitesse de l'arme
 * @param angle angle de l'arme
 */
    public void setVitesseY(double vitesse, double angle) {
        angleRad = angle / 180 * Math.PI;
        this.vitesseY = vitesse * Math.sin(angleRad);
    }
/**
 * Définit la position de l'arme sur l'écran
 * @param positionX position en x de l'arme
 * @param positionY position en y de l'arme
 */
    public void setPosition(int positionX, int positionY) {
        posXDouble = (double) positionX;
        posYDouble = (double) positionY;
    }
/**
 * Calcule le mouvement de l'arme
 */
    protected void calculerMouvement() {
        calculPositionX();
        calculPositionY();
        calculVitesseX();
        calculVitesseY();
    }
/**
 * Retourne la puissance de l'arme
 * @return retourne la puissance de l'arme
 */
    public double getPuissance() {
        return puissance;
    }
/**
 * Retourne le volume
 * @return retourne 10 par défaut
 */
    public int getVolume() {
        return 10;
    }

}
